package q1901_findPeakGrid;

public class Solution_1 {
    int[][] dirs = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
    /*
    此题的解法在于：
    首先建立一个方法checkNum() 用来判断当前位置是否大于四个方向的所有数字
    然后利用循环 初始化一个位置(0, 0) 从这个位置开始寻找 如果发现有一个方向的数字大于当前位置
    那么就向该方向移动，直到找到一个满足条件的位置
    由于题中设置了矩形四个边界都是-1 所以随着移动一定能够找到一个满足条件的位置
     */
    public int[] findPeakGrid(int[][] mat) {
        int r = 0, c = 0;
        while (true) {
            if (checkNum(mat, r, c)) return new int[]{r, c};
            for (int i = 0; i < 4; i++) {
                int dr = r + dirs[i][0], dc = c + dirs[i][1];
                if (dr >= 0 && dr < mat.length && dc >= 0 && dc < mat[0].length && mat[dr][dc] > mat[r][c]) {
                    r = dr;
                    c = dc;
                    break;
                }
            }
        }

    }

    public boolean checkNum(int[][] mat, int i, int j) {
        boolean left = false, right = false, up = false, down = false;
        if (i - 1 < 0 || (i > 0 && i < mat.length && j >= 0 && j < mat[0].length && mat[i][j] > mat[i - 1][j])) up = true;
        if (i + 1 >= mat.length || (i >= 0 && i < mat.length - 1 && j >= 0 && j < mat[0].length && mat[i][j] > mat[i + 1][j])) down = true;
        if (j - 1 < 0 || (i >= 0 && i < mat.length && j > 0 && j < mat[0].length && mat[i][j] > mat[i][j - 1])) left = true;
        if (j + 1 >= mat[0].length || (i >= 0 && i < mat.length && j >= 0 && j < mat[0].length - 1 && mat[i][j] > mat[i][j + 1])) right = true;

        return left && right && up && down;
    }
}
